package cn.slg.module.system.service.pk.utils;

import cn.slg.module.system.dal.dataobject.wujiang.WuJiangDO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;

import static cn.slg.module.system.service.pk.utils.Random.random;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Target {

    // 提供待选定的目标范围
    private List<WuJiangDO> targetWuJiangS;
    // 提供要选定的目标个数
    private int number;

    // 这个函数就是选择目标，基于传进来的List，和要返回的数量，随机返回一个List
    public static List<WuJiangDO> randomTargets(List<WuJiangDO> targetWuJiangS, int number) {
        // 选中的武将
        ArrayList<WuJiangDO> selectWuJiangS = new ArrayList<>();
        List<Integer> alreadyIndex = new ArrayList<>();

        // 有可能可选择的目标比要选择的目标少，为了避免下面陷入死循环，这里取较小值。
        int allNumber = Math.min(targetWuJiangS.size(), number);

        for (int i = 0; i < allNumber; i++) {
            int nextInt;
            while (true) {
                nextInt = random.nextInt(targetWuJiangS.size());
                if (!alreadyIndex.contains(nextInt)) {
                    alreadyIndex.add(nextInt);
                    break;
                }
            }
            selectWuJiangS.add(targetWuJiangS.get(nextInt));
        }
        return selectWuJiangS;
    }


    // 兵刃单体

}
